package org.blankie.util;

public interface AsynchronousOrganizationManager<O extends Organized,
                                                 N extends Organized,
                                                 L extends Organized> {

    void startGettingLeaves(Organized managed, Collector<L> into); 
    
    void startGettingNodes(Organized managed, Collector<N> into);

    void startGettingOrganization(Organized managed, Receiver<O> into);

    void startGettingParent(Organized managed, Receiver<N> into);

    void startGettingRoot(Organized managed, Receiver<N> into);

    boolean isLeaf(Organized object);

    boolean isNode(Organized object);

    boolean isOrganization(Organized object);

    boolean isRoot(Organized object);

}
